package reesoft.certificate.agent;

import reesoft.certificate.entity.SignRequest;
import reesoft.common.entity.Result;

/**
 * 数字证书代理接口类
 *
 * Created by reesoft on 2017-07-18
 */
public interface CertificateAgent
{
    /**
     * 给数据签名
     *
     * @param id        密钥所有者标识
     * @param data      待签名的数据
     * @param algorithm 签名算法，MD5 或 RSA
     * @return 错误码及描述，签名成功时包含数字签名
     */
    Result<String> signData(String id, String data, String algorithm);

    /**
     * 验证数据的签名
     *
     * @param id        密钥所有者标识
     * @param data      被签名的数据
     * @param algorithm 签名算法，MD5 或 RSA
     * @param signature 数字签名
     * @return 错误码及描述
     */
    Result verifySignData(String id, String data, String algorithm, String signature);

    /**
     * 给请求对象签名
     *
     * @param request 请求对象
     * @return 错误码及描述，签名成功时包含数字签名
     */
    Result signRequest(SignRequest request);

    /**
     * 验证请求的签名
     *
     * @param request 请求对象
     * @return 错误码及描述
     */
    Result verifySignRequest(SignRequest request);
}
